local urlTabela = minetest.get_worldpath().."/lunoldobj.tbl"
lunoldobj = { }
lunoldobj.nodes = { }
lunoldobj.entities = { }
--lunoldobj.nodes = {"mod:a", "mod:b"}
--lunoldobj.entities = {
--	"mobs:sheep","mobs:rat","mobs:thief","mobs:tree_monster","mobs:killer","mobs:sand_monster","mobs:stone_monster","mobs:oerkki",
--	"animal_vombie:vombie_spawner","animal_vombie:vombie__default",
--}

if not minetest.setting_getbool("log_mods") then minetest.setting_set("log_mods", "false") end

doSave = function()
	local file = io.open(urlTabela, "w")
	if file then
		file:write(minetest.serialize(lunoldobj))
		file:close()
	end
end
--doSave()

doPrint = function(mensagem)
	if minetest.setting_getbool("log_mods") then 
		minetest.log("action", mensagem)
		minetest.chat_send_all(mensagem)
	end
	print(mensagem)--Imprime no terminal de controle independente se é ou nao gravado o Log ou avisado ao jogador sobre o ocorrido.
end

doLoad = function()
	local file = io.open(urlTabela, "r")
	if file then
		lunoldobj = minetest.deserialize(file:read("*all"))
		file:close()
		if lunoldobj.nodes == nil then lunoldobj.nodes = {} end
		if lunoldobj.entities == nil then lunoldobj.entities = {} end
		if type(lunoldobj) ~= "table" then
			doPrint("[lunoldobj:erro] O arquivo '"..urlTabela.."' não esta no formato de tabela!")
			return
		end
	end
end
doLoad()

doFindNodes = function()
	if #lunoldobj.nodes >=1 then
		for _,node_name in ipairs(lunoldobj.nodes) do
			 minetest.register_node(":"..node_name, {
				  groups = {old=1},
			 })
		end
		minetest.register_abm({
			nodenames = {"group:old"},
			interval = 1,
			chance = 1,
			action = function(pos, node)
				doPrint("[lunoldobj] Apagando block '"..node.name.."'...")
				minetest.env:remove_node(pos)
			end,
		})
	end
end
doFindNodes()

doFindEntities = function()
	if #lunoldobj.entities >=1 then
		for _,entity_name in ipairs(lunoldobj.entities) do
			 minetest.register_entity(":"..entity_name, {
				  on_activate = function(self, staticdata)
				  		doPrint("[lunoldobj] Apagando entidade '"..self.name.."'...")
				      self.object:remove()
				  end,
			 })
		end
	end
end
doFindEntities()

minetest.register_chatcommand("deloe", {  -- Del.O.E. = "Delete Old Entities"
	params = "",
	description = "Adiciona uma entidade a lista de entidades velhas para limpeza.",
	privs = {},
	func = function(name, param)
		local objeto = string.match(param, "^([^ ]+)$")
		doPrint("[lunoldobj] Entidades velhas: '".. #lunoldobj.entities .."'")
		
		if objeto ~= "" then
			for _,obj_name in ipairs(lunoldobj.entities) do
				if obj_name == objeto then
					doPrint("[lunoldobj:detido] Entidade-velha '".. obj_name .."' já estava registrada na lista de limpeza.")
					return
				end
			end

			lunoldobj.entities[#lunoldobj.entities + 1] = objeto
			doPrint("[lunoldobj] Entidade-velha '".. objeto .."' adicionada a lista de limpeza...")
			doSave()
			doFindEntities()
			return true
		end
	end,
})

minetest.register_chatcommand("delon", {  -- Del.O.B. = "Delete Old Nodes"
	params = "",
	description = "Adiciona um bloco a lista de blocos velhos para limpeza.",
	privs = {},
	func = function(name, param)
		local objeto = string.match(param, "^([^ ]+)$")
		doPrint("[lunoldobj] Blocos velhos: '".. #lunoldobj.nodes .."'")
		
		if objeto ~= "" then
			for _,obj_name in ipairs(lunoldobj.nodes) do
				if obj_name == objeto then
					doPrint("[lunoldobj:detido] Bloco velho '".. obj_name .."' já estava registrado na lista de limpeza.")
					return
				end
			end

			lunoldobj.nodes[#lunoldobj.nodes + 1] = objeto
			doPrint("[lunoldobj] Bloco velho '".. objeto .."' adicionada a lista de limpeza...")
			doSave()
			doFindNodes()
			return true
		end
	end,
})
